from typing import Dict, List, Any, Optional

# 产品相关工具定义
class ProductTools:
    def __init__(self, http_client):
        self.http = http_client
    
    def get_products(self, params: Optional[Dict[str, Any]] = None):
        """获取产品列表"""
        print('获取产品列表')
        response = self.http.get('/api.php/v1/products', params=params)
        print(response)
        return response
        
    def create_product(self, data: Dict[str, Any]):
        """创建产品"""
        print('创建新产品')
        response = self.http.post('/api.php/v1/products', json=data)
        print(response)
        return response
        
    def get_product_detail(self, product_id: int):
        """获取产品详情"""
        print(f'获取产品ID={product_id}的详情')
        response = self.http.get(f'/api.php/v1/products/{product_id}')
        print(response)
        return response
        
    def update_product(self, product_id: int, data: Dict[str, Any]):
        """编辑产品"""
        print(f'编辑产品ID={product_id}的信息')
        response = self.http.put(f'/api.php/v1/products/{product_id}', json=data)
        print(response)
        return response
        
    def delete_product(self, product_id: int):
        """删除产品"""
        print(f'删除产品ID={product_id}')
        response = self.http.delete(f'/api.php/v1/products/{product_id}')
        print(response)
        return response
    
    # 用于注册工具到MCP
    def register(self, mcp_instance):
        """
        将所有产品工具注册到MCP实例
        
        Args:
            mcp_instance: FastMCP实例
        """
        mcp_instance.add_tool(self.get_products, name="get_products", description="获取产品列表。参数：可选params(Dict)包含筛选条件如limit(每页数量)、page(页码)、status(状态)、order(排序方式)、name(按产品名称搜索)等。不传参数时获取所有产品列表。")
        
        mcp_instance.add_tool(self.create_product, name="create_product", description="创建新产品。参数：data(Dict，必填)包含产品信息，必填字段有name(产品名称)、code(产品代号)，可选字段有PO(产品负责人ID，可从get_users获取)、QD(测试负责人ID)、RD(发布负责人ID)、type(产品类型)、status(状态)、desc(描述)等。需要产品经理或管理员权限。")
        
        mcp_instance.add_tool(self.get_product_detail, name="get_product_detail", description="获取产品详情。参数：product_id(int，必填)产品ID。产品ID可从get_products方法返回的列表中获取。")
        
        mcp_instance.add_tool(self.update_product, name="update_product", description="编辑产品信息。参数：product_id(int，必填)产品ID；data(Dict，必填)包含要更新的字段，如name(产品名称)、code(产品代号)、status(状态)等。产品ID可从get_products获取，现有产品信息可从get_product_detail获取。需要产品负责人或管理员权限。")
        
        mcp_instance.add_tool(self.delete_product, name="delete_product", description="删除产品。参数：product_id(int，必填)要删除的产品ID。产品ID可从get_products方法返回的列表中获取。注意：删除产品会同时删除相关的需求、Bug等数据，请谨慎操作。需要管理员权限。") 